// pages/cart/cart.js
let orderList = []
Page({

  /**
   * 页面的初始数据
   */
  data: {
    cartList: orderList, // 购物车列表
    hascartList: false, //购物车列表,列表是否有数据,如果有数据，则不为空购物车
    totalPrice: 0, //总价格
    selectAll: true, //全选 默认
    orderList: null
  },
  /**
  * 计算总价(sum=num*prixe)  要遍历被选中的
  总价 = 选中的商品1的 价格 * 数量 + 选中的商品2的 价格 * 数量 + ...
  */
  getTotalPrice() {
    let cartList = this.data.cartList; // 获取购物车列表
    let sumtotal = 0;
    for (let i = 0; i < cartList.length; i++) { // 循环列表得到每个数据
      if (cartList[i].selected) { // 判断选中才会计算价格
        sumtotal += cartList[i].num * cartList[i].price; // 所有价格加起来
      }
    }
    this.setData({ // 最后赋值到data中渲染到页面
      cartList: cartList,
      totalPrice: sumtotal.toFixed(2)
    });
  },


  //单选 1.改变自己的样式，2，改变当前的状态（显示（true or false）） 3.返回数据重新计算价格.点击时选中，再点击又变成没选中状态，其实就是改变 selected 字段。通过 data-index="{{index}}" 把当前商品在列表数组中的下标传给事件。

  selectedList(e) {
    console.log(e)
    let index = e.currentTarget.dataset.index; //获取自己传的index
    let cartList = this.data.cartList; //获取购物车列表
    let selected = cartList[index].selected; //当前选中的商品的状态
    cartList[index].selected = !selected; //改变当前选中的商品的状态 true=!true
    // if (selected){
    //   this.setData({
    //     selectAll:false,
    //     cartList  //重新返回数据
    //   })
    // }
    this.setData({
      selectAll: false,
      cartList //重新返回数据
    })

    this.getTotalPrice() //重新计算价格
  },

  /**
   * 购物车全选事件 1.改变自己的样式(记得要返回自己的状态，它是在data里，不是数据里了)，改变当前的状态（显示（true or false）） 2.改变单选的状态cartList[i].selected = selectAll;
   * 3.返回数据重新计算价格
   */
  selectedAll(e) {
    //console.log(e)
    // let index = e.currentTarget.dataset.index; //获取自己传的index
    let selectAll = this.data.selectAll; //是否全选状态
    selectAll = !selectAll; //改变当前选中的商品的状态 true=!true
    let cartList = this.data.cartList; //获取购物车列表
    for (let i = 0; i < cartList.length; i++) {
      cartList[i].selected = selectAll; //改变所有商品的状态
    }
    this.setData({
      cartList: cartList, //重新返回数据
      selectAll: selectAll
    })
    this.getTotalPrice() //重新计算价格
  },


  //删除事件  cartList.splice(index, 1); //返回数据，同时要判断购物车是不是空，如果不为空就重新计算价格,点击删除按钮则从购物车列表中删除当前元素，删除之后如果购物车为空，改变购物车为空标识hasList为false
  delList(e) {
    let index = e.currentTarget.dataset.index; //获取自己传的index
    let cartList = this.data.cartList; //获取购物车列表
    cartList.splice(index, 1); //删除购物车列表里这个商品
    this.setData({
      cartList: cartList //重新返回数据
    })
     // 缓存热更新
    wx.setStorage({
      key: 'orderList',
      data: cartList,
    })
    if (!cartList.length) { //如果购物车为空
      this.setData({
        hascartList: false //显示购物车为空页面
      });
    } else { //如果不为空
      this.getTotalPrice(); //重新计算总价格
    }
  },

  /**
   * 绑定加数量事件
   */
  jia(e) {
    let index = e.currentTarget.dataset.index; //获取自己传的index
    let cartList = this.data.cartList; //获取购物车列表
    let num = cartList[index].num;
    num = num + 1;
    cartList[index].num = num;
    this.setData({
      cartList: cartList //重新返回数据
    })
    // 缓存热更新
    wx.setStorage({
      key: 'orderList',
      data: cartList,
    })
    this.getTotalPrice(); //重新计算总价格
  },

  /**
   * 绑定减数量事件
   */
  jian(e) {
    let index = e.currentTarget.dataset.index; //获取自己传的index
    let cartList = this.data.cartList; //获取购物车列表
    let num = cartList[index].num;
    if (num <= 1) {
      return false;
    }
    num = num - 1;
    cartList[index].num = num;
    this.setData({
      cartList: cartList //重新返回数据
    })
    // 缓存热更新
    wx.setStorage({
      key: 'orderList',
      data: cartList,
    })
    this.getTotalPrice(); //重新计算总价格
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {

    // 获取用户刚刚下单的数据
    // 拿到后重新放入一个新数组，这个新数组定义在全局
    // 这时候把这个新数组赋值给data
    // 赋值后从data里面拿到总的订单数据，这时候重新存入缓存
    // 存入缓存的同时删除刚才的订单数据
    wx.getStorage({
      key: 'buyNum',
      success: (res) => {
        console.log("拿到了购物车的数据", res)
        console.log("此时的orderList", orderList)

        if (orderList.length == 0) {
          orderList.push(res.data)
          this.setOrderList("orderList", orderList, 'buyNum')
        } else if (orderList.length > 0) {
          var sign
          for (var i = 0; i < orderList.length; i++) { 
            if (orderList[i].parent_id == res.data.parent_id && orderList[i].child_id == res.data.child_id) {
              orderList[i].num = orderList[i].num + res.data.num
              this.setOrderList("orderList", orderList, 'buyNum')
              return sign
            }
          }
          if (!sign) {
            orderList.push(res.data)
 
            this.setOrderList("orderList", orderList, 'buyNum')
          }
        }
        console.log("已经放入了orderList", orderList, 'buyNum')
        this.getAllStorage()
        this.setData({
          cartList: orderList
        })

      },
    })
    this.getTotalPrice()

  },

  // 添加总体缓存setOrderList缓存函数封装
  setOrderList(key,data,removebuyNum){
    wx.setStorage({
      key: key,
      data: data,
      success: (res) => {
        console.log("添加新的订单成功")
        wx.removeStorage({
          key: removebuyNum,
        })
      },
    })
  },
  // 获取所有缓存数据函数封装
  getAllStorage(){
    wx.getStorage({
      key: 'orderList',
      success: (res) => {
        console.log("显示一下缓存数据", res)
        if (res.data.length > 0) {
          this.setData({
            hascartList: true
          })
        }
        orderList = res.data
        this.setData({
          cartList: res.data
        })
      },
    })
  },
  // 更新缓存函数封装
  // updateList(){
  //   wx.setStorage({
  //     key: 'orderList',
  //     data: cartList,
  //   })
  // },

  // 
  onLoad: function (options) {
    console.log(options)
    this.getAllStorage()
  }
})